package lp2.projeto;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;



/**
 * @author Tarcito,Edgard,Raiff
 *]
 */
public class RepositorioDeUsuarios {
	
	private List<Usuario> usuarios;
	private Arquivo arquivo;
	private List<Estabelecimento> estabelecimentos;
	

	/**
	 *Cria um reposit�rio de usu�rios 
	 * @throws Exception 
	 */
	public RepositorioDeUsuarios(String localArq, List<Estabelecimento> estabelecimentos) throws Exception {
		usuarios = new ArrayList<Usuario>();
		arquivo = new Arquivo(localArq);
		this.estabelecimentos = estabelecimentos;		
		if (usuarios.size() > 0){
			adicionaTodos();
		}
	}
	
	public RepositorioDeUsuarios(String localArq) throws Exception {
		usuarios = new ArrayList<Usuario>();
		arquivo = new Arquivo(localArq);		
		if (usuarios.size() > 0){
			adicionaTodos();
		}
	}
	
	public List<Estabelecimento> getEstabelecimentos() {
		return estabelecimentos;
	}

	public void setEstabelecimentos(List<Estabelecimento> estabelecimentos) {
		this.estabelecimentos = estabelecimentos;
	}

	public void setUsuarios(List<Usuario> usuarios) {
		this.usuarios = usuarios;
	}

	public void setArquivo(Arquivo arquivo) {
		this.arquivo = arquivo;
	}

	/**
	 * Retorna o arquivo usado no repositorio
	 */
	public Arquivo getArquivo() {
		return arquivo;
	}

	/**
	 * Seta o arquivo que esta sendo usado pelo diretorio
	 * @param arquivo
	 * @throws FileNotFoundException 
	 */
	public void setArquivo(String arquivo) throws FileNotFoundException {
		this.arquivo = new Arquivo(arquivo);
	}



	/**
	 * Adiciona um usuario no reposit�rio
	 * @param user
	 */
	public void adicionaUsuario(Usuario usuario) throws IOException{
		usuarios.add(usuario);
		List<String> user = new ArrayList<String>();
		user.add(usuario.getDataEHora());
		user.add(usuario.getNome());
		for(String opiniao : usuario.getOpinioes()){
			String transicao = opiniao.toString();
			user.add(transicao);
		}
		arquivo.setArquivo(user);
	}
	

	/**
	 * Cria varios usuarios a partir da lista das linhas do arquivo 
	 * @param dados
	 * @param arquivo
	 * @throws Exception 
	 */
	private void adicionaTodos() throws Exception{
            List<String[]> users = arquivo.getArquivo();
            for(String[] user : users){
                    List<String> opniao = new ArrayList<String>();
                    for(int i = 2; i < user.length; i++){
                            opniao.add(user[i]);
                    }
                    usuarios.add(new Usuario(user[1], opniao, user[0]));
            }
        }


	/**
	 * @return a lista dos usuarios lidos de um arquivo
	 */
	public List<Usuario> getUsuarios() {
		return usuarios;
	}


	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((arquivo == null) ? 0 : arquivo.hashCode());
		result = prime * result
				+ ((usuarios == null) ? 0 : usuarios.hashCode());
		return result;
	}


	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		RepositorioDeUsuarios other = (RepositorioDeUsuarios) obj;
		if (arquivo == null) {
			if (other.arquivo != null)
				return false;
		} else if (!arquivo.equals(other.arquivo))
			return false;
		if (usuarios == null) {
			if (other.usuarios != null)
				return false;
		} else if (!usuarios.equals(other.usuarios))
			return false;
		return true;
	}


	@Override
	public String toString() {
		return "RepositorioDeUsuarios [usuarios=" + usuarios + "]";
	}
	
	
	
}
